/**
 * 数字工具类
 */
NumberUtils = {
};

/**
 * 检查是否为正数,带浮点
 */
NumberUtils.isUnsignedNumeric = function(a) {
	var reg = /^\d+(.\d+)?$/;
	return reg.test(a);
};


/**
 * 检查是否为正整数
 */
NumberUtils.isUnsignedInteger = function(a) {
	var reg = /^\d*$/;
	return reg.test(a);
};

NumberUtils.mul = function( val1, val2){
	var num1 = parseFloat(val1);
	var num2 = parseFloat(val2);
    return (num1*num2).toFixed(2);
}

/**
 * 将科学计数法转换成字符串
 */
NumberUtils.isScientificNotationToString = function(val) {
	if(StringUtils.isEmpty(val)) return val;
	var num = new Number(val); 
	return num;
};

/**
 * 加法运算，避免数据相加小数点后产生多位数和计算精度损失。
 */
NumberUtils.add = function(arg1, arg2){
    arg1 = arg1.toString(), arg2 = arg2.toString();
    var arg1Arr = arg1.split("."), arg2Arr = arg2.split("."), d1 = arg1Arr.length == 2 ? arg1Arr[1] : "", d2 = arg2Arr.length == 2 ? arg2Arr[1] : "";
    var maxLen = Math.max(d1.length, d2.length);
    var m = Math.pow(10, maxLen);
    var result = Number(((arg1 * m + arg2 * m) / m).toFixed(maxLen));
    var d = arguments[2];
    return typeof d === "number" ? Number((result).toFixed(d)) : result;
};
/**
 * 加法运算，避免数据相减小数点后产生多位数和计算精度损失。
 */
NumberUtils.sub = function(arg1, arg2){
    return NumberUtils.add(arg1, -Number(arg2), arguments[2]);
};
/**
 * 乘法运算，避免数据相乘小数点后产生多位数和计算精度损失。
 */
NumberUtils.multi = function(arg1, arg2){
    var r1 = arg1.toString(), r2 = arg2.toString(), m, resultVal, d = arguments[2];
    m = (r1.split(".")[1] ? r1.split(".")[1].length : 0) + (r2.split(".")[1] ? r2.split(".")[1].length : 0);
    resultVal = Number(r1.replace(".", "")) * Number(r2.replace(".", "")) / Math.pow(10, m);
    return typeof d !== "number" ? Number(resultVal) : Number(resultVal.toFixed(parseInt(d)));
};
/**
 * 除法运算，避免数据相除小数点后产生多位数和计算精度损失。
 */
NumberUtils.div = function(arg1, arg2){
    var r1 = arg1.toString(), r2 = arg2.toString(), m, resultVal, d = arguments[2];
    m = (r2.split(".")[1] ? r2.split(".")[1].length : 0) - (r1.split(".")[1] ? r1.split(".")[1].length : 0);
    resultVal = Number(r1.replace(".", "")) / Number(r2.replace(".", "")) * Math.pow(10, m);
    return typeof d !== "number" ? Number(resultVal) : Number(resultVal.toFixed(parseInt(d)));
};